#ifndef ABSTRACTMATRIX_H
#define ABSTRACTMATRIX_H

template < typename _DimType_ >
class AbstractMatrix
{
public:
    const int nRows;
    const int nCols;
    bool isTransposed;

    AbstractMatrix(const int nRows,const int nCols):
        nRows(nRows), nCols(nCols){
        isTransposed = false;
    }
    AbstractMatrix(const AbstractMatrix &absMat) = delete;
    AbstractMatrix operator = (const AbstractMatrix &absMat) = delete;
    virtual _DimType_& operator () (const int indexOfRow, const int indexOfCol) const = 0;

    //virtual AbstractMatrix add(const AbstractMatrix &m) = 0;

    virtual void transpose() = 0;

    //virtual AbstractMatrix& operator * (const AbstractMatrix &absMat) = 0;

    /*virtual void determinant() = 0;
    virtual void inverce() = 0;

    virtual void multiply(const _DimType_ &scalar) = 0;
    virtual void add(const AbstractMatrix *absMat) = 0;
    virtual void add(const _DimType_ &scalar) = 0;*/
    virtual ~AbstractMatrix(){}
};

#endif // ABSTRACTMATRIX_H
